import AMapLoader from '@amap/amap-jsapi-loader'

let geocoder: any = null // 用于处理地理编码的实例
let geolocation: any = null // 用于获取用户位置的实例
// 扩展 Window 接口
declare global {
  interface Window {
    _AMapSecurityConfig?: {
      securityJsCode: string;
    };
  }
}
export const getRegionCode = async (): Promise<string | null> => {
  // 设置 securityJsCode
  window._AMapSecurityConfig = {
    securityJsCode: '797d844d25d57bda7acf526229243605', // 从这里获取 securityJsCode
  }
  // 加载高德地图 JSAPI
  const AMap = await AMapLoader.load({
    key: '179a1f158dbf54d4883fd08c6fec5ae4', // 申请好的Web端开发者Key，首次调用 load 时必填
    version: '2.0', // 指定要加载的 JSAPI 的版本，缺省时默认为 1.4.15
    plugins: ['AMap.Geocoder', 'AMap.Geolocation'], // 需要加载的插件列表
  })

  // 初始化 Geocoder 和 Geolocation 实例
  geocoder = new AMap.Geocoder()
  geolocation = new AMap.Geolocation({
    enableHighAccuracy: true, // 是否使用高精度定位
    timeout: 10000, // 设定定位超时时间，单位毫秒
    maximumAge: 0, // 禁用缓存
  })

  // 获取用户位置
  return new Promise((resolve, reject) => {
    geolocation.getCurrentPosition((status: any, result: any) => {
      if (status === 'complete' && result.position) {
        const lnglat = new AMap.LngLat(result.position.lng, result.position.lat)
        // 根据经纬度获取地区编码
        geocoder.getAddress(lnglat, (status: any, result: any) => {
          if (status === 'complete' && result.regeocode) {
            const areaCode = result.regeocode.addressComponent.adcode // 获取地区编码
            resolve(areaCode) // 返回地区编码
          } else {
            reject('获取地区编码失败')
          }
        })
      } else {
        reject('定位失败')
      }
    })
  })
}
